package de.unicornEntertainment.stundenplanapp.threadTools;

import java.util.ArrayList;
import java.util.HashMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.os.AsyncTask;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import de.unicornEntertainment.stundenplanapp.R;
import de.unicornEntertainment.stundenplanapp.lehreruebersicht.LehrerDetailsActivity;
import de.unicornEntertainment.stundenplanapp.util.JSONParser;

public class MyAsyncTask_LehrerDetails extends AsyncTask {

	// Globale Deklaration
	private LehrerDetailsActivity context;
	private HashMap<String, String> lehrerdaten;
	private JSONArray lehrer_unterrichtsfaecher;
	private ArrayList<String> faecher;
			
	// JSON Nodes
	private static final String TAG_LEHRER = "lehrer";
	private static final String TAG_BEZEICHNUNG = "bezeichnung";
	private static final String TAG_IDLEHRER = "idLehrer";
	private static final String TAG_KURZNAME = "Kurzname";
	private static final String TAG_NAME = "Name";
	private static final String TAG_VORNAME = "Vorname";
	private static final String TAG_TELEFON = "Telefonnummer";
	private static final String TAG_EMAIL = "E-Mail";
	
	private String url = "http://gruppef.green-lagoon.de/lehrer.php?idLehrer=";
	private HashMap<String, String> map;
	
		
	// Konstruktor
	public MyAsyncTask_LehrerDetails(LehrerDetailsActivity context, HashMap<String, String> lehrerdaten) {
		this.context = context;
		this.lehrerdaten = lehrerdaten;
	}

	// Hintergrundverarbeitung in eigenem Thread
	@Override
	protected Object doInBackground(Object... arg0) {
		try {
			// JSON Parser instanziieren
			JSONParser jParser = new JSONParser();
			
			// URL um Parameter idLehrer ergänzen
			url += lehrerdaten.get(TAG_IDLEHRER);
			
//			System.out.println("URL: " + url);
			
			// JSON als String von URL abgreifen
			JSONObject lehrerfaecher = jParser.getJSONFromUrl(url);
			
			System.out.println("JSON: " + lehrerfaecher.toString());
			
			// JSON-Array mit allen Lehrern abrufen
            lehrer_unterrichtsfaecher = lehrerfaecher.getJSONArray(TAG_LEHRER);
            
//            System.out.println("Anzahl Lehrer im JSON-Array: " + lehrerfaecher.length());
            
            // HashMap und ArrayList instannziieren
            map = new HashMap<String, String>();
            faecher = new ArrayList<String>();
            
            // Über alle Fächer iterieren
            for(int i = 0; i < lehrer_unterrichtsfaecher.length(); i++){
            	JSONObject fach = lehrer_unterrichtsfaecher.getJSONObject(i);
                 
//            	System.out.println("Unterrichtsfächer: " + fach);
            	
                // Jedes JSON-Item in eine Variable stellen
                String fachbezeichnung = fach.getString(TAG_BEZEICHNUNG);
                
                // Fach in ArrayListe ablegen
                faecher.add(fachbezeichnung);
			}
            
            // Fächer zu String zusammensetzen
            String faecherGesamt = "";
            for (int i = 0; i < faecher.size(); i++) {
			    if (i == 0) {
			    	faecherGesamt += faecher.get(i);  
				}
			    else {
					faecherGesamt += ", " + faecher.get(i);
				}
            }
            
//            System.out.println("ArrayList 'Fächer': " + faecher);
//            System.out.println("Fächer als Gesamtstring: " + faecherGesamt);
            
            // Lehrerinfos aus übergebener HashMap abrufen
            String idLehrer = lehrerdaten.get(TAG_IDLEHRER);
            String kurzname = lehrerdaten.get(TAG_KURZNAME);
            String name = lehrerdaten.get(TAG_NAME);
            String vorname = lehrerdaten.get(TAG_VORNAME);
            String telefonnummer = lehrerdaten.get(TAG_TELEFON);
            String email = lehrerdaten.get(TAG_EMAIL);
            
            // Alle Infos in Hashmap schreiben
            map.put(TAG_NAME, "Name: " + name);
            map.put(TAG_VORNAME, "Vorname: " + vorname);
            map.put(TAG_KURZNAME, "Kürzel: " + kurzname);
            map.put(TAG_TELEFON, "Telefonnumer: " + telefonnummer);
            map.put(TAG_EMAIL, "E-Mail: " + email);
            map.put("faecher", "Unterrichtsfächer: " + faecherGesamt);
            
            
            // HashMap zu ArrayList hinzufügen
            context.getLehrerinfos().add(map);
		}
		catch(JSONException e) {
			e.printStackTrace();
			
			// Dialog im Fehlerfall entlassen
			context.getPrg().dismiss();
		}
		return null;
	}

	// Nachbearbeitung
	@Override
	protected void onPostExecute(Object result) {
		
		/**
         * Die Daten aus den JSON-Objekten an den Adapter übergeben.
         * */
        context.setAdapter(new SimpleAdapter(context, context.getLehrerinfos(),
                R.layout.lehrerliste_listview_row_details,
                new String[] {TAG_NAME, TAG_VORNAME, TAG_KURZNAME, TAG_TELEFON, TAG_EMAIL, "faecher"},
                new int[] {R.id.lehrerliste_listview_rowDetails_name,
        					R.id.lehrerliste_listview_rowDetails_vorname,
        					R.id.lehrerliste_listview_rowDetails_lehrerkuerzel,
        					R.id.lehrerliste_listview_rowDetails_telefonnummer,
        					R.id.lehrerliste_listview_rowDetails_email,
        					R.id.lehrerliste_listview_rowDetails_unterrichtsfaecher}));
        
        // Adapter in der ListView registrieren 
        context.getLehrerdetails().setAdapter(context.getAdapter());
        
		
		// Dialog entlassen
		context.getPrg().dismiss();
	}
}
